// * Eval: 内建函数 eval执行字符串代码。

// 例子1：
let code = 'console.log("hello world")'
eval(code) // hello world

// *****************************************************************************

// 例子2：
let a = 1

let code2 = `
let b = 10;
b++;
console.log(b)
`

function func() {
	eval(code2) // 11
	// 在 eval 中使用外部局部变量也被认为是一个坏的编程习惯，因为这会使代码维护变得更加困难。
	eval(`a = 2; console.log(a)`) // 2
}

func()

// *****************************************************************************

let x = 1

{
	let x = 5

	// eval 直接调用的形式会使用当前词法环境变量
	eval(`console.log(x)`) // 5

	// window.eval 的调用形式会在全局环境中执行
	window.eval(`console.log(x)`) // 1
}

// 使用 new Function 替代 eval（以传参的方式）
let f = new Function('x', 'console.log(x)')

f(5) // 5
